// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.SQLUtils;
// import com.alibaba.druid.sql.ast.*;
// import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
// import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor*;

// import java.util.ArrayList;
// import java.util.std::list;
#pragma once
#include <string>
#include <list>
#include "../SQLStatementImpl.h"
#include "../SQLReplaceable.h"
#include "SQLDropStatement.h"

class SQLName;
class SQLExpr;
class DbType;
class SQLASTVisitor;
class SQLObject;
class SQLDDLStatement;

class SQLDropDatabaseStatement 
:public SQLStatementImpl ,
virtual public SQLDropStatement,
virtual public SQLReplaceable {
    public:
    SQLExpr_ptr database;
    BOOL_ptr ifExists;
    BOOL_ptr restrict;
    BOOL_ptr cascade;

    //adb
    BOOL_ptr physical;

    SQLDropDatabaseStatement() ;

    SQLDropDatabaseStatement(DbType_ptr   dbType) ;
  SHAREDOBJECT(SQLDropDatabaseStatement);
    
    void accept0(SQLASTVisitor_ptr  visitor) ;

    SQLName_ptr getName() ;

    string_ptr  getDatabaseName() ;

    SQLExpr_ptr getDatabase() ;

    void setDatabase(SQLExpr_ptr database) ;

    void setDatabase(string_ptr  database) ;

    string_ptr  getServer();

    BOOL_ptr setServer(string_ptr  server) ;

    BOOL_ptr isIfExists();

    void setIfExists(BOOL_ptr ifExists) ;

    
    SQLObject_list_ptr getChildren() ;

    BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target) ;

    BOOL_ptr getRestrict() ;

    BOOL_ptr isRestrict() ;

    void setRestrict(BOOL_ptr restrict) ;

    BOOL_ptr isCascade() ;

    void setCascade(BOOL_ptr cascade) ;

    BOOL_ptr isPhysical() ;

    void setPhysical(BOOL_ptr physical) ;

    
    SQLDDLStatement::DDLObjectType getDDLObjectType() ;
};
